package protect.notfinish;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/22 22:22
 * @package protect.week04
 * @description 文件说明
 */


/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Test {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //首先判断俩链表是否为空，为空直接返回
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }
        if (list1 == null && list2 == null) {
            return null;
        }

        //定义一个新链表
        ListNode list3 = new ListNode(0);

        //定义一个辅助变量
        ListNode temp = list3;
        //当两变量都不为空的时候，开始一个一个比较，较小数得到之后，将辅助变量指向较小数，(假想存在一个指针)较小数所在的链表指针 后移一位
        while (list1 != null && list2 != null) {
            //比较取较小数
            if (list1.val < list2.val) {
                //让辅助变量的指向得到的较小数
                temp.next = new ListNode(list1.val);
                //链表指针后移一位
                list1 = list1.next;
            } else {
                //同上
                temp.next = new ListNode(list2.val);
                list2 = list2.next;
            }
            //辅助变量后移一位，即指向下一个需要赋值的节点
            temp = temp.next;
        }
        //当指针不断后移到出现第一个空链表的时候，将辅助变量直接指向非空链表
        if (list1 != null ) {
            temp.next = list1;
        }
        if (list2 != null) {
            temp.next = list2;
        }
        //去掉头节点，不然会输出
        list3 = list3.next;
        return list3;
    }
}

